package com.atguigu.sort;

import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;

/**
 * @author shkstart
 * @create 2021-09-06 9:55
 */

//注意随机数：
//    Random r = new Random(47);
//            int a = r.nextInt(26);
//            System.out.println(a);
    /*
    想要获取一个范围内的随机数（例如26，随机数可能是0-25），首先需要一个种子（其实就是一个数值）。
    每个种子会对应这个范围内（0-26）的唯一的一个随机数。
    47这个种子在26这个范围内，所对应的随机数为24，所以每次随机得出的结果都为24.
    （注意：47在26这个范围内对应的是24，这个是死的，固定的，无论你执行多少次，它还是24）
    至于为什么种子47会对应24，这个涉及到java封装的算法，有兴趣可以深入了解。
*/

public class Sort1 {
    public static void main(String[] args) {
        System.out.println("请输入你想生成的随机数大小范围");
        Scanner scanner = new Scanner(System.in);
        System.out.print("最小：");
        int min = scanner.nextInt();
        System.out.print("最大：");
        int max = scanner.nextInt();
        System.out.print("想要创建几个随机数：");
        int sum = scanner.nextInt();
        int[] ran = ran(min,max,sum);
        System.out.print("请输入要查找的第几的数字：");
        int k = scanner.nextInt();
        Instant instant1 = Instant.now();
        int sort = sort(ran, k);
        Instant instant2=Instant.now();
        System.out.println("以毫秒计的的时间差："+Duration.between(instant1,instant2).toMillis());
        System.out.println("要查找的第"+k+"大的数字为："+sort);
        System.out.print(Arrays.toString(ran));


    }




    //封装冒泡排序方法
    public static int sort(int[] arr,int k){
        //临时变量
        int temp=0;
        //标识变量，表示是否进行过交换
        boolean flag=false;
        //一次循环代表排出一个最大值位置的确定
        for (int i=0;i<arr.length-1;i++){
            //一次循环代表相邻两个数字的比较，最后实现排出最大值到最后的数
            for (int j=0;j<arr.length-1-i;j++){
                //交换
                if (arr[j]>arr[j+1]) {
                    //一趟中若是进行过交换，那就改变flag
                    flag=true;
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            if (!flag){
                //一趟比较中，一次交换都没发生过，那就后面不用再比较了
                break;
            }else {
                flag=false;//重置flag，进行下一次判断
            }
        }
        return arr[k-1];
//            System.out.println(Arrays.toString(arr));
    }

    //生生成随机数
    static int[] ran(int start,int end,int n){
        int[] arr = new int[n];
        for (int i=0;i<n;i++){
           int random= (int)(Math.random() * (end-start+1)+start);
            arr[i]=random;
        }
        return arr;
    }

}
